TestNG এবং Listeners

Java Technologies - টেস্টএনজি (TestNG)
273

TestNG (টেস্টএনজি) পরিচিতি

TestNG (টেস্টএনজি) একটি জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক যা Java-তে ব্যবহৃত হয়। এটি ইউনিট টেস্টিং, ইন্টিগ্রেশন টেস্টিং, সিস্টেম টেস্টিং এবং অটোমেটেড টেস্টিং করার জন্য শক্তিশালী এবং নমনীয় একটি ফ্রেমওয়ার্ক। TestNG-এর নাম এসেছে "Test Next Generation" থেকে, এবং এটি JUnit-এর তুলনায় আরও উন্নত ফিচার সরবরাহ করে।

TestNG এর মাধ্যমে টেস্টের কার্যকারিতা এবং ফলাফল বিশ্লেষণ সহজ হয়। এটি প্রোগ্রামারদের টেস্টিংকে সহজ, দ্রুত এবং আরও কার্যকরভাবে সম্পাদন করতে সাহায্য করে। এতে মাল্টিপল টেস্ট গ্রুপ পরিচালনা, ডিপেনডেন্সি, প্যারালেল টেস্টিং এবং বিভিন্ন টেস্ট কনফিগারেশন সহজে সেট করা যায়।


TestNG Listeners (টেস্টএনজি লিসেনারস)

TestNG এ লিসেনারস (Listeners) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা টেস্ট রান করার সময় টেস্টের বিভিন্ন স্টেটের উপর নজর রাখতে সাহায্য করে। লিসেনারস এর মাধ্যমে আপনি টেস্ট কেসের পূর্বে, পরবর্তী, বা টেস্ট ফলাফল জানার সময় অতিরিক্ত কোড চালাতে পারেন। যেমন, টেস্ট পাস, ফেইল বা স্কিপ হওয়া অবস্থার উপর ভিত্তি করে নির্দিষ্ট অ্যাকশন নেওয়া যেতে পারে।

লিসেনারস এর প্রকার

  1. ITestListener: এই লিসেনারটি টেস্ট কেসের রানিং সময় (before, after) এবং টেস্টের ফলাফল (pass, fail) ট্র্যাক করতে ব্যবহৃত হয়।
  2. ISuiteListener: এটি স্যুটের রান শুরু এবং শেষের সময়কে ট্র্যাক করে।
  3. IInvokedMethodListener: টেস্ট মেথডগুলি (Test Methods) রান হওয়ার পূর্বে বা পরবর্তী কাজ করার জন্য এই লিসেনারটি ব্যবহৃত হয়।

লিসেনারস ব্যবহার করার উপায়

লিসেনার ব্যবহার করতে হলে, প্রথমে আপনাকে @Listeners অ্যানোটেশন দিয়ে আপনার টেস্ট ক্লাসে লিসেনার অন্তর্ভুক্ত করতে হবে। এর পর, লিসেনারের প্রয়োজনীয় মেথডগুলির ইমপ্লিমেন্টেশন করতে হবে।

import org.testng.ITestListener;
import org.testng.TestListenerAdapter;
import org.testng.ITestResult;

public class MyListener extends TestListenerAdapter implements ITestListener {
    public void onTestStart(ITestResult result) {
        System.out.println("Test Started: " + result.getName());
    }

    public void onTestSuccess(ITestResult result) {
        System.out.println("Test Passed: " + result.getName());
    }

    public void onTestFailure(ITestResult result) {
        System.out.println("Test Failed: " + result.getName());
    }
    
    public void onTestSkipped(ITestResult result) {
        System.out.println("Test Skipped: " + result.getName());
    }
}

এই কোডে, MyListener ক্লাসটি ITestListener ইন্টারফেসের মাধ্যমে টেস্টের ফলাফলগুলো মনিটর করে। এরপর, TestNG ক্লাসে এই লিসেনার যুক্ত করা হবে:

import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners(MyListener.class)
public class MyTestClass {
    @Test
    public void testMethod() {
        System.out.println("Test Method Executed");
    }
}

TestNG Listeners এর উপকারিতা

  • ফলাফল লগিং: টেস্টের স্টেটাস (পাস/ফেইল) সম্পর্কে বিস্তারিত লগ তৈরি করতে পারে।
  • অ্যাডভান্সড রিপোর্টিং: লিসেনারের মাধ্যমে কাস্টম রিপোর্ট তৈরি করা যায়, যেমন টেস্টের সময়, স্কোর ইত্যাদি।
  • ডিপেনডেন্সি ম্যানেজমেন্ট: নির্দিষ্ট টেস্টের ফলাফলের উপর ভিত্তি করে অন্য টেস্টের রান করানো যায়।
  • অটোমেটেড টেস্টিং: লিসেনারস ব্যবহার করে টেস্ট রান করার পূর্বে বা পরবর্তী যে কোনো কার্যক্রম যেমন ডেটাবেস কনফিগারেশন বা ক্লিনআপ করা যায়।

TestNG এবং লিসেনারস এর সংমিশ্রণ টেস্টিংয়ের সময় আরও কার্যকর এবং নিয়ন্ত্রিত কার্যক্রম নিশ্চিত করে।

Content added By

Listeners কি এবং কেন প্রয়োজন?

170

Listeners টেস্টএনজির একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা টেস্টের জীবনচক্র (test life cycle) পর্যবেক্ষণ করার জন্য ব্যবহৃত হয়। এটি টেস্ট চলাকালীন বিভিন্ন ইভেন্ট (events) শুনতে এবং সেগুলির প্রতিক্রিয়া জানাতে সাহায্য করে। Listeners টেস্টের বিভিন্ন ধাপে কার্যকলাপ (activity) বা ইভেন্টের উপর নজর রাখতে পারে, যেমন টেস্ট শুরু হওয়া, টেস্ট সফল হওয়া বা ব্যর্থ হওয়া, টেস্টের পরে পরবর্তী কাজের পরিচালনা ইত্যাদি।

Listeners এর ধরণ

টেস্টএনজিতে কয়েক ধরনের Listeners রয়েছে যা বিভিন্ন ইভেন্টে কাজ করে:

  • TestListenerAdapter: এই ক্লাসটি ITestListener ইন্টারফেসের ডিফল্ট বাস্তবায়ন প্রদান করে, যা টেস্টের আগে, পরে এবং চলাকালীন বিভিন্ন ইভেন্টের উপর কাজ করে।
  • ISuiteListener: এটি টেস্ট স্যুটের শুরু এবং শেষ হওয়ার সময়ে ইভেন্টগুলির ওপর কাজ করে।
  • IInvokedMethodListener: এটি প্রতিটি টেস্ট মেথডের আগের এবং পরের ইভেন্টের ওপর কাজ করে।

কেন প্রয়োজন Listeners?

Listeners ব্যবহারের মূল উদ্দেশ্য হলো টেস্ট এক্সিকিউশন (execution) নিয়ন্ত্রণে রাখা এবং ফলাফল সংগ্রহ করা। কিছু বিশেষ প্রয়োজনীয়তা নিচে দেওয়া হলো:

  1. টেস্টের জীবনচক্র মনিটরিং: Listeners টেস্টের বিভিন্ন ধাপে (যেমন টেস্ট শুরু, টেস্ট শেষ, টেস্ট সফল বা ব্যর্থ হওয়া) ইভেন্ট ট্র্যাক করে এবং রিপোর্ট তৈরি করে।
  2. ফলাফল সংগ্রহ: টেস্টের ফলাফলগুলি সংগ্রহ করে বিশেষভাবে কাস্টম রিপোর্ট তৈরি করতে সাহায্য করে। যেমন, টেস্টের কোনো নির্দিষ্ট কন্ডিশন পূর্ণ হলে বা ব্যর্থ হলে কোন নির্দিষ্ট কাজ করা।
  3. অ্যাকশন প্রি এবং পোস্ট টেস্ট: টেস্ট শুরু হওয়ার আগে বা পরে কোনো নির্দিষ্ট অ্যাকশন সম্পাদন করা, যেমন লোগিং বা ডাটাবেস ক্লিনআপ।
  4. টেস্টের স্কিপিং বা ফেলিওর ট্র্যাকিং: যদি কোনো টেস্ট ফেইল করে বা স্কিপ হয়ে যায়, সেক্ষেত্রে সংশ্লিষ্ট তথ্য সংগ্রহ করা এবং আরও বিশ্লেষণের জন্য ব্যবহৃত হতে পারে।
  5. কাস্টম রিপোর্টিং: টেস্টের ফলাফল থেকে কাস্টম রিপোর্ট তৈরি করা, যেমন HTML, XML বা JSON ফরম্যাটে।

Listeners এর মাধ্যমে টেস্টের কার্যক্রম আরও স্বয়ংক্রিয় এবং কার্যকরীভাবে পরিচালনা করা সম্ভব হয়, যা টেস্টিং প্রক্রিয়াকে দ্রুত ও নির্ভুল করে তোলে।

Content added By

ITestListener এবং ISuiteListener Interface এর ব্যবহার

169

TestNG একটি জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক যা Java ভিত্তিক অ্যাপ্লিকেশনগুলোর জন্য টেস্ট চালাতে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের Listener ইন্টারফেস প্রদান করে, যা টেস্ট রান চলাকালে বিভিন্ন ইভেন্টের উপর নজর রাখতে সাহায্য করে। এই ইন্টারফেসগুলো ব্যবহার করে আপনি টেস্টের পূর্বে বা পরে কিছু কাজ করতে পারেন, যেমন লগিং বা রিপোর্ট তৈরি করা।


ITestListener Interface

ITestListener ইন্টারফেসটি টেস্ট রান চলাকালে প্রতিটি টেস্টের স্ট্যাটাস ট্র্যাক করতে ব্যবহৃত হয়। এটি টেস্ট কেসের ফলাফল সম্পর্কে বিভিন্ন ইভেন্টের উপর কাস্টম অ্যাকশন গ্রহণের সুযোগ দেয়। এই ইন্টারফেসে ৬টি গুরুত্বপূর্ণ মেথড রয়েছে, যেমন:

  • onTestStart(ITestResult result): টেস্ট শুরু হওয়ার সময় কল হয়।
  • onTestSuccess(ITestResult result): টেস্ট সফলভাবে শেষ হলে কল হয়।
  • onTestFailure(ITestResult result): টেস্ট ব্যর্থ হলে কল হয়।
  • onTestSkipped(ITestResult result): টেস্ট স্কিপ হলে কল হয়।
  • onTestFailedButWithinSuccessPercentage(ITestResult result): টেস্ট কিছু সফলতার সাথে ব্যর্থ হলে কল হয়।
  • onTestFailedWithTimeout(ITestResult result): যখন টেস্ট টাইমআউট হয়, তখন কল হয়।

ITestListener ব্যবহার করে, আপনি টেস্টের আগে বা পরে কাস্টম লজিক যোগ করতে পারেন, যেমন রিপোর্ট তৈরি করা, ইমেইল পাঠানো বা লগিং করা।


উদাহরণ: ITestListener ব্যবহার

import org.testng.ITestListener;
import org.testng.ITestResult;

public class MyTestListener implements ITestListener {

    @Override
    public void onTestStart(ITestResult result) {
        System.out.println("টেস্ট শুরু: " + result.getName());
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        System.out.println("টেস্ট সফল: " + result.getName());
    }

    @Override
    public void onTestFailure(ITestResult result) {
        System.out.println("টেস্ট ব্যর্থ: " + result.getName());
    }

    @Override
    public void onTestSkipped(ITestResult result) {
        System.out.println("টেস্ট স্কিপ: " + result.getName());
    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        System.out.println("টেস্ট কিছুটা সফল: " + result.getName());
    }

    @Override
    public void onTestFailedWithTimeout(ITestResult result) {
        System.out.println("টেস্ট টাইমআউট: " + result.getName());
    }
}

এই Listener ক্লাসটি ব্যবহার করে আপনি টেস্ট রান চলাকালে বিভিন্ন ইভেন্টের প্রতি রেসপন্স করতে পারেন।


ISuiteListener Interface

ISuiteListener ইন্টারফেসটি সম্পূর্ণ টেস্ট সুইটের (suite) শুরু এবং শেষ হওয়ার সময় ইভেন্টে হ্যান্ডেল করতে ব্যবহৃত হয়। এই ইন্টারফেসে ২টি প্রধান মেথড রয়েছে:

  • onStart(ISuite suite): যখন টেস্ট সুইট শুরু হয়, তখন কল হয়।
  • onFinish(ISuite suite): যখন টেস্ট সুইট শেষ হয়, তখন কল হয়।

এই ইন্টারফেসটি সাধারণত টেস্ট সুইটের ডাটা সংগ্রহ, লগিং বা রিপোর্টিং করার জন্য ব্যবহৃত হয়।


উদাহরণ: ISuiteListener ব্যবহার

import org.testng.ISuite;
import org.testng.ISuiteListener;

public class MySuiteListener implements ISuiteListener {

    @Override
    public void onStart(ISuite suite) {
        System.out.println("টেস্ট সুইট শুরু: " + suite.getName());
    }

    @Override
    public void onFinish(ISuite suite) {
        System.out.println("টেস্ট সুইট শেষ: " + suite.getName());
    }
}

এই Listener ক্লাসটি টেস্ট সুইটের শুরু এবং শেষ হওয়ার সময় বিভিন্ন কাস্টম অ্যাকশন নিতে সাহায্য করে, যেমন রিপোর্টিং বা ফলাফল লগ করা।


Listener গুলোকে টেস্টNG তে ব্যবহার করা

আপনি ITestListener এবং ISuiteListener ইন্টারফেসগুলোর ব্যবহার টেস্টNG কনফিগারেশন ফাইলের মাধ্যমে করতে পারেন বা কোডের মাধ্যমে রেজিস্টার করতে পারেন।

XML কনফিগারেশন ফাইলে Listener যোগ করা:

<suite name="MySuite">
    <listeners>
        <listener class-name="MyTestListener" />
        <listener class-name="MySuiteListener" />
    </listeners>
    <test name="MyTest">
        <classes>
            <class name="TestClass" />
        </classes>
    </test>
</suite>

কোডের মাধ্যমে Listener রেজিস্টার করা:

import org.testng.TestListenerAdapter;
import org.testng.TestNG;

public class TestRunner {
    public static void main(String[] args) {
        TestNG testng = new TestNG();
        testng.setTestClasses(new Class[] {TestClass.class});
        testng.addListener(new MyTestListener());
        testng.addListener(new MySuiteListener());
        testng.run();
    }
}

এইভাবে ITestListener এবং ISuiteListener ইন্টারফেসগুলোর মাধ্যমে আপনি টেস্ট রান এবং সুইটের বিভিন্ন ইভেন্টের প্রতি কাস্টম লজিক প্রয়োগ করতে পারবেন।

Content added By

উদাহরণ সহ Custom Listeners তৈরি

196

TestNG একটি জনপ্রিয় Java টেস্টিং ফ্রেমওয়ার্ক যা বিভিন্ন ধরনের টেস্ট চালানোর জন্য ব্যবহার করা হয়। টেস্টএনজি প্রাথমিকভাবে built-in listeners প্রদান করে, তবে আপনি আপনার নিজস্ব কাস্টম listeners তৈরি করতে পারেন যাতে টেস্ট চলাকালীন নির্দিষ্ট অ্যাকশনগুলোর প্রতি আপনার নজর থাকে।

কাস্টম লিসেনার কী?

TestNG এর লিসেনার (Listeners) হলো এমন একটি ইন্টারফেস যা টেস্ট চলাকালীন ইভেন্টগুলির উপর নজর রাখতে এবং সেগুলির উপর কাস্টম কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়। এটি বিভিন্ন ইভেন্ট যেমন টেস্ট শুরু, টেস্ট সফল, টেস্ট ব্যর্থ ইত্যাদি ট্র্যাক করতে ব্যবহৃত হতে পারে।


কাস্টম লিসেনার তৈরি করার পদক্ষেপ

TestNG এ কাস্টম লিসেনার তৈরি করতে হলে, আপনাকে ITestListener ইন্টারফেসটি ইমপ্লিমেন্ট করতে হবে। নিচে এর একটি উদাহরণ দেওয়া হল।


১. ITestListener ইন্টারফেস ইমপ্লিমেন্ট করা

প্রথমে একটি ক্লাস তৈরি করুন যা ITestListener ইন্টারফেসটি ইমপ্লিমেন্ট করবে। এই ইন্টারফেসটি টেস্টের বিভিন্ন ইভেন্টে রেসপন্স করতে সাহায্য করবে।

import org.testng.ITestListener;
import org.testng.ITestResult;

public class CustomListener implements ITestListener {

    @Override
    public void onTestStart(ITestResult result) {
        System.out.println("টেস্ট শুরু: " + result.getName());
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        System.out.println("টেস্ট সফল: " + result.getName());
    }

    @Override
    public void onTestFailure(ITestResult result) {
        System.out.println("টেস্ট ব্যর্থ: " + result.getName());
    }

    @Override
    public void onTestSkipped(ITestResult result) {
        System.out.println("টেস্ট বাদ দেয়া: " + result.getName());
    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        // এই মেথডটি অল্প কিছু ব্যর্থতার পরও টেস্টকে সফল বলে চিহ্নিত করার জন্য ব্যবহৃত হয়
    }

    @Override
    public void onStart(org.testng.ITestContext context) {
        System.out.println("টেস্ট শুরু হচ্ছে: " + context.getName());
    }

    @Override
    public void onFinish(org.testng.ITestContext context) {
        System.out.println("টেস্ট শেষ: " + context.getName());
    }
}

এই ক্লাসটি টেস্ট শুরু, সফল হওয়া, ব্যর্থ হওয়া, এবং বাদ দেওয়া ইভেন্টগুলির উপর কাস্টম অ্যাকশন প্রিন্ট করবে।


২. লিসেনার টেস্টNG কনফিগারেশনে যোগ করা

TestNG কনফিগারেশনে কাস্টম লিসেনার যোগ করতে হলে, আপনি testng.xml ফাইল ব্যবহার করতে পারেন।

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Test Suite">
    <listeners>
        <listener class-name="CustomListener"/>
    </listeners>

    <test name="My Test">
        <classes>
            <class name="TestClass"/>
        </classes>
    </test>
</suite>

এখানে, <listener class-name="CustomListener"/> অংশটি কাস্টম লিসেনার যুক্ত করে।


৩. টেস্ট ক্লাস তৈরি করা

এখন, একটি টেস্ট ক্লাস তৈরি করা যাক যাতে আমাদের কাস্টম লিসেনার কার্যকরী হবে।

import org.testng.annotations.Test;

public class TestClass {

    @Test
    public void testMethod1() {
        System.out.println("টেস্ট ১ চালানো হচ্ছে");
    }

    @Test
    public void testMethod2() {
        System.out.println("টেস্ট ২ চালানো হচ্ছে");
        throw new RuntimeException("একটি ত্রুটি ঘটেছে");
    }
}

এখানে দুটি টেস্ট মেথড রয়েছে—একটি সফল এবং অন্যটি ব্যর্থ হবে।


৪. কাস্টম লিসেনার কার্যকরী হওয়া

এখন, testng.xml ফাইলটি রান করলে কাস্টম লিসেনারের মাধ্যমে আপনি টেস্টের বিভিন্ন স্টেজের ইভেন্ট ট্র্যাক করতে পারবেন। উদাহরণস্বরূপ, টেস্ট শুরু, সফল, বা ব্যর্থ হওয়ার সময় কাস্টম বার্তা দেখতে পারবেন।


সারাংশ

TestNG তে কাস্টম লিসেনার ব্যবহার করে আপনি টেস্ট রানিংয়ের বিভিন্ন ইভেন্টের উপর নজর রাখতে এবং সেগুলির জন্য কাস্টম কার্যক্রম পরিচালনা করতে পারেন। ITestListener ইন্টারফেস ইমপ্লিমেন্ট করে টেস্টের বিভিন্ন ইভেন্টে কাস্টম অ্যাকশন ট্রিগার করা সম্ভব।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...